home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctjja86.arc / TIMEREV.PRO < prev    next >
Text File  |  1985-11-13  |  1KB  |  56 lines

  1. /* List reversal benchmark  */
  2. /* Modified for use with Arity/Prolog Compiler */
  3.  
  4. :- public main/0.
  5. main :- 
  6.     write('Number of iterations: '),
  7.     read(N),
  8.     generate(30, X),
  9.     time(Start),
  10.     fiftytests(X, N),
  11.     time(Aftertest),
  12.     fiftyplaceboes(X, N),
  13.     time(End),
  14.     tdif(Start, Aftertest, Testinterval),
  15.     tdif(Aftertest, End, Controlinterval),
  16.     Testtime is (Testinterval - Controlinterval) / N,
  17.     write(Testtime).
  18.  
  19. /* Number of logical inferences = (N**2 + N)/2 + N + 1,  */
  20. /* where N is the number of elements in the list.        */
  21.  
  22. reverse([],[]).
  23. reverse([X|Y],Z) :- reverse(Y,Y1), append(Y1,[X],Z).
  24. append([],X,X).
  25. append([X|Y],Z,[X|W]) :- append(Y,Z,W).
  26.  
  27. /* To perform the test, generate a 30-element list   */
  28. /* and then reverse it (446 logical inferences).     */
  29.  
  30. generate(0,[]).
  31. generate(N,[N|Y]) :-  M is N-1, generate(M,Y).
  32.  
  33. fiftytests(X, N) :-
  34.     for(1, N, _),
  35.     reverse(X, Y),
  36.     fail.
  37. fiftytests(_, _).
  38.  
  39. fiftyplaceboes(X, N) :-
  40.     for(1, N, _),
  41.     placebo(X, Y),
  42.     fail.
  43. fiftyplaceboes(_, _).
  44.  
  45. placebo(_, _).
  46.  
  47. tdif(time(H1,M1,S1,Hn1), time(H2,M2,S2,Hn2), A) :-
  48.     A is    (H2 - H1) * 3600 +
  49.         (M2 - M1) * 60 +
  50.         (S2 - S1) + 
  51.         (Hn2 - Hn1) / float(100).
  52.  
  53. for(I, I, I) :- !.
  54. for(I, J, I).
  55. for(I, J, K) :- inc(I, I1), for(I1, J, K).
  56.